package com.android.xk.mask.serialPort

import android.os.SystemClock
import com.apkfuns.logutils.LogUtils
import io.netty.buffer.ByteBufUtil
import io.netty.buffer.Unpooled
import tp.xmaihh.serialport.stick.AbsStickPackageHelper
import java.io.InputStream

class StickPackageHelper : AbsStickPackageHelper {

    private val buff = Unpooled.buffer()

    private val lenIndex = 13

    override fun execute(inputStream: InputStream): ByteArray? {
        try {
            val available = inputStream.available()
            var result = ByteArray(available)
            val size = inputStream.read(result)
            if (size > 0) {
                buff.writeBytes(result)
            }

            val len = buff.readableBytes()

            if (len < lenIndex) {
                buff.resetReaderIndex()
                SystemClock.sleep(100)
            } else {
//                val h1 = buff.readByte()
//                val h2 = buff.readByte()
//
//                if (h1 == 0x7e.toByte() && h2 == 0x0f.toByte()) {
//                    val h3 = buff.readByte()
//                    val h4 = buff.readByte()
//                    buff.readBytes(8)
//                    val dataLen = buff.readByte().toInt() + lenIndex
//                    if (h3==)
//
//
//                } else {
//                    buff.clear()
//                }

                buff.readBytes(lenIndex - 1)
                val dataLen = buff.readByte().toInt() + lenIndex
                LogUtils.e("串口数据长度 $available 数据长度 $dataLen 缓冲区长度 $len")
                if (len < dataLen) {
                    buff.resetReaderIndex()
                    SystemClock.sleep(100)
                } else {
                    LogUtils.e(ByteBufUtil.hexDump(buff))
                    result = ByteBufUtil.getBytes(buff, 0, len)
                    buff.clear()
                    return result
                }
            }
//            if (available > 10) {
//                if
//            }
//            if (available > 0) {
//                val result = ByteArray(available)
//                val size = inputStream.read(result)
//                if (size > 0)
//                    return result
//            } else {
//                SystemClock.sleep(250)
//            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return null
    }
}